昨天把資料表建好了,今天要來製作與資料表互動的「模型」。
Laravel 的 Eloquent ORM 提供了漂亮、簡潔的 ActiveRecord 來和資料庫互動。每個資料庫表有一個對應的「模型」可以用來跟資料表互動。你可以透過模型查詢資料表內的資料,以及新增記錄到資料表中。
在開始之前,一定要在 config/database.php
中設定資料庫連線。
開始之前,要先建立一個 Eloquent 模型。模型通常放在 app
目錄,不過你可以放在任何可以透過composer.json
自動載入的地方。
所有的 Eloquent 模型都繼承Illuminate\Database\Eloquent\Model
。
建立模型實例的最簡單的方法是使用 Artisan 指令的 make:model
:
php artisan make:model User
假設當你產生一個模型的時候,想要產生一個資料庫遷移,可以使用 --migration
或 -m
選項:
php artisan make:model User --migration
php artisan make:model User -m
現在,讓我們來看一個 Flight
模型的範例,我們將會用它來從 flights
資料表取回與儲存資訊:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model
{
//
}
請注意,我們並沒有告訴 Eloquent Flight
模型該使用哪一個資料表。依照慣例,除非明確地指定其他名稱,不然class
的小寫、底線、複數形式會拿來當作資料表的表單名稱。所以,這個案例中,Eloquent 將會假設 Flight
模型儲存記錄在 flights
資料表。你可以在模型上定義一個 table
屬性,用來指定自訂的資料表:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model
{
/**
* 與模型關聯的資料表。
*
* @var string
*/
protected $table = 'my_flights';
}
Eloquent 也會假設每個資料表有一個主鍵欄位叫做 id
。你可以定義一個 $primaryKey
屬性來進行自定義。
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model
{
/**
* The primary key associated with the table.
*
* @var string
*/
protected $primaryKey = 'flight_id';
}
此外,Eloquent 會假設主鍵是一個遞增的整數值,這表示預設的主鍵位自動轉換成 int
。如果你希望使用非遞增或非數字的主鍵,務必把模型上的 public $incrementing
屬性設定為 false
。
<?php
class Flight extends Model
{
/**
* Indicates if the IDs are auto-incrementing.
*
* @var bool
*/
public $incrementing = false;
}
如果你的主鍵不是一個整數,你應該將模型上的 protected $keyType
屬性設定為 string
。
<?php
class Flight extends Model
{
/**
* The "type" of the auto-incrementing ID.
*
* @var string
*/
protected $keyType = 'string';
}
Eloquent 會預設你的資料表會有 created_at
和 updated_at
欄位。如果你不希望 Eloquent 自動管理這些欄位,可以將模型上的 $timestamps
屬性設定為 false
:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model
{
/**
* Indicates if the model should be timestamped.
*
* @var bool
*/
public $timestamps = false;
}
如果你需要客製化你的時間戳記格式,在你的模型內設定 $dateFormat
屬性。這個屬性決定日期如何在資料庫中被儲存,以及當模型被序列化成陣列或是 JSON 時的格式:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model
{
/**
* The storage format of the model's date columns.
*
* @var string
*/
protected $dateFormat = 'U';
}
如果你需要自訂欄位名稱,並用來儲存時間戳記,你可以在模型中設定 CREATED_AT
和 UPDATED_AT
常數:
<?php
class Flight extends Model
{
const CREATED_AT = 'creation_date';
const UPDATED_AT = 'last_update';
}
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model
{
/**
* 為模型選擇連線名稱。
*
* @var string
*/
protected $connection = 'connection-name';
}